﻿CREATE PROCEDURE [dbo].[usp_select_Fault_Count_Over_Time_By_ErrorType]
(
        @Applications       varchar(2000)      = NULL
	   ,@ErrorType		   varchar(100)		= NULL
	   ,@StartDate         datetime         = NULL
	   ,@EndDate           datetime         = NULL
	   ,@Debug             bit              = 0
)
AS

/****************************************************************************
Name: usp_select_Fault_Count_Over_Time_By_ErrorType.sql
*****************************************************************************/
SET NOCOUNT ON;

-- Bootstrap
DECLARE @DebugPrefix       varchar(10);
DECLARE @ErrorCode         int;

SET @ErrorCode          = 0;
SET @DebugPrefix        = '>>> DEBUG: ';

-- Print parameters
IF (@Debug > 0)
BEGIN
    PRINT '@Applications = ' + @Applications
	PRINT '@ErrorType = ' + @ErrorType
	PRINT '@StartDate = ' + CAST (@StartDate as varchar)
	PRINT '@EndDate = ' + CAST (@EndDate as varchar)
END;

SELECT COUNT(*) as FaultCount, [ErrorType], [Application] 
FROM dbo.[Fault]
WHERE [DateTime] BETWEEN @StartDate AND @EndDate
AND [Application] IN (SELECT [Application] FROM dbo.udf_SplitApplications(@Applications))
GROUP BY [ErrorType], [Application]

-- CHECK FOR ERROR
SET @ErrorCode = @@Error;
IF (@ErrorCode <> 0) GOTO ERROR_HANDLER;
			
RETURN 0;

-- Handles errors.
ERROR_HANDLER:
IF (@ErrorCode <> 0)
BEGIN
    IF (@Debug > 0) 
		BEGIN
			PRINT @DebugPrefix + 'Error Code = ' + CAST(@ErrorCode AS varchar(10)) + ' occurred.';
			RETURN @ErrorCode
		END

    -- Don't return any evidence of what specific error occurred, i.e. 
    -- we want to ward off potential hackers.
    RETURN 1;
END;

SET NOCOUNT OFF;
